[iOS 10] iMessage アプリで会話の参加者の情報を取得する
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では「iMessage アプリ」から「会話の参加者」の情報を取得する方法を紹介します。
「iMessage アプリ」は iOS 10 から作成できるようになったアプリであり、iOS 組み込みの「メッセージ」アプリ上で動作します。
「iMessage アプリ」開発の基本事項については以下の記事などを参照してください。
- [iOS 10] メッセージ拡張の作成方法 | Developers.IO
- [iOS 10] メッセージ拡張 MSMessageTemplateLayoutによるテキストや画像(映像)の配置 | Developers.IO
取得できる情報
iMessage アプリから会話の参加者の UUID を取得できます。取得できる UUID は以下の 3 種類です。
- 自分の UUID
- 自分以外の会話の参加者の UUID (人数分)
- メッセージの送信者の UUID
UUID の値は端末ごとに異なります。また、iMessage アプリを無効にしたり、収容アプリを削除したりすると UUID の値は別のものになります。
取得できる UUID を使用すれば、以下のような機能を実現できます。
- 「自分以外の会話の参加者の UUID」の数をカウントして、会話の参加者の人数をチェックする
- 「自分の UUID」と「メッセージの送信者の UUID」を比較して、自分が送ったメッセージかどうかをチェックする
「自分の UUID」と「自分以外の会話の参加者の UUID」を取得
「自分の UUID」を取得するには MSConversation
の localParticipantIdentifier
プロパティを、「会話の参加者の UUID」を取得するには remoteParticipantIdentifiers
プロパティを使用します。
override func willBecomeActive(with conversation: MSConversation) { // 自分の UUID を取得 print("localParticipantIdentifier:\(conversation.localParticipantIdentifier)") // 自分以外の会話の参加者の UUID を取得 print("remoteParticipantIdentifiers:\(conversation.remoteParticipantIdentifiers)") }
例えば、会話の参加者が 2 人の場合 localParticipantIdentifier
, remoteParticipantIdentifiers
プロパティの値は以下のようになります。
// localParticipantIdentifier, remoteParticipantIdentifiers の値の例 localParticipantIdentifier:27FBEBF3-1BFB-451D-BFC0-F73A2CFB033B remoteParticipantIdentifiers:[6F9D9D4A-CAC7-4549-B2F9-65912A2EE3D9]
「メッセージの送信者の UUID」を取得
「メッセージの送信者の UUID」を取得するには MSMessage
の senderParticipantIdentifier
プロパティを使用します。
override func didReceive(_ message: MSMessage, conversation: MSConversation) { print("message.senderParticipantIdentifier:\(message.senderParticipantIdentifier)") }
// senderParticipantIdentifier の値の例 message.senderParticipantIdentifier:6F9D9D4A-CAC7-4549-B2F9-65912A2EE3D9
UUID を「連絡先アプリに登録されている氏名」に変換する
MSMessageTemplateLayout
のテキスト関連のプロパティに格納する値の中に $\(<UUID 文字列>)
を含めると、UUID の文字列が「連絡先アプリに登録されている氏名」に置き換わります。連絡先アプリに登録されていない場合は、メールアドレスや電話番号に置き換わります。
MSMessage
の summaryText
プロパティについても同様に置き換わります。
以下の例では、MSMessageTemplateLayout
の caption
プロパティに格納する値の中に $\(<UUID 文字列>)
を含めています。
// MSMessageTemplateLayout 作成 let layout = MSMessageTemplateLayout() layout.image = UIImage(named: "image.jpg") layout.caption = "これは$\(self.activeConversation!.localParticipantIdentifier.uuidString)のメッセージです" // MSMessage 作成 let message = MSMessage() message.layout = layout // message.summaryText = "$\(self.activeConversation!.localParticipantIdentifier.uuidString)がメッセージを送信しました" // ...
上記コードを実行すると、以下のような結果になります。
さいごに
本記事では「iMessage アプリ」から「会話の参加者」の情報を取得する方法を紹介しました。今後も引き続き、iMessage アプリの機能を試していきたいと思います。